﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Windows.Forms;
using System.Drawing;

namespace SwParaPlatform2
{
    //public partial class MainAssemblyPage : PageBase
    //{
    //    private DataGridView dataGridView;

    //    public MainAssemblyPage() : base()
    //    {
    //        InitializeComponent();
    //        SetTitle("主装配体部件配置");
    //        InitializeDataGridView();
    //        LoadData();
    //    }

    //    private void InitializeComponent()
    //    {
    //        this.dataGridView = new DataGridView();

    //        // 
    //        // dataGridView
    //        // 
    //        this.dataGridView.AllowUserToAddRows = false;
    //        this.dataGridView.AllowUserToDeleteRows = false;
    //        this.dataGridView.AllowUserToResizeColumns = false;
    //        this.dataGridView.AllowUserToResizeRows = false;
    //        this.dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
    //        this.dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
    //        this.dataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
    //        this.dataGridView.Location = new System.Drawing.Point(12, 12);
    //        this.dataGridView.Name = "dataGridView";
    //        this.dataGridView.Size = new System.Drawing.Size(776, 376);
    //        this.dataGridView.TabIndex = 0;
    //        this.dataGridView.CellFormatting += new DataGridViewCellFormattingEventHandler(this.dataGridView_CellFormatting);

    //        // 
    //        // 主装配体部件编辑界面
    //        // 
    //        tableLayoutPanel.Controls.Add(this.dataGridView, 0, 1);
    //        this.Size = new System.Drawing.Size(800, 450);
    //    }

    //    private void InitializeDataGridView()
    //    {
    //        dataGridView.Columns.Add("Name", "Name");

    //        if (DataStore.Instance.MainAssemblyData.Count > 0)
    //        {
    //            foreach (var key in DataStore.Instance.MainAssemblyData.First().Value.Keys)
    //            {
    //                dataGridView.Columns.Add(key, key);
    //            }
    //        }

    //        dataGridView.Columns["Name"].ReadOnly = true;

    //        // 设置 "Equation" 列宽度固定为 100
    //        if (dataGridView.Columns.Contains("Equation"))
    //        {
    //            dataGridView.Columns["Equation"].Width = 100;
    //            dataGridView.Columns["Equation"].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
    //        }
    //    }

    //    private void LoadData()
    //    {
    //        foreach (var item in DataStore.Instance.MainAssemblyData)
    //        {
    //            var row = new DataGridViewRow();
    //            row.CreateCells(dataGridView);
    //            row.Cells[0].Value = item.Key;

    //            int cellIndex = 1;
    //            foreach (var subItem in item.Value)
    //            {
    //                row.Cells[cellIndex].Value = subItem.Value;
    //                if (subItem.Key != "Equation")
    //                {
    //                    row.Cells[cellIndex].ReadOnly = true;
    //                }
    //                cellIndex++;
    //            }

    //            dataGridView.Rows.Add(row);
    //        }

    //        dataGridView.AutoResizeColumns();
    //        dataGridView.AutoResizeRows();
    //    }

    //    private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    //    {
    //        // 如果是标题栏或第一列，跳过
    //        if (e.RowIndex == -1 || e.ColumnIndex == 0)
    //            return;

    //        // 检查单元格是否可编辑
    //        if (dataGridView.Columns[e.ColumnIndex].Name != "Equation" && dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly)
    //        {
    //            e.CellStyle.BackColor = Color.LightGray;
    //            e.CellStyle.ForeColor = Color.DarkGray;
    //        }
    //    }

    //    private void SaveChanges()
    //    {
    //        foreach (DataGridViewRow row in dataGridView.Rows)
    //        {
    //            string name = row.Cells[0].Value.ToString();
    //            var updatedData = new Dictionary<string, object>();

    //            for (int i = 1; i < dataGridView.Columns.Count; i++)
    //            {
    //                string key = dataGridView.Columns[i].Name;
    //                object value = row.Cells[i].Value;
    //                updatedData[key] = value;
    //            }

    //            DataStore.Instance.UpdateMainAssemblyData(name, updatedData);
    //        }
    //    }
    //}

    //public partial class Page2 : PageBase
    //{
    //    private TreeView treeView;
    //    private ContextMenuStrip contextMenu;
    //    private TreeNode selectedNode;

    //    public Page2() : base()
    //    {
    //        SetTitle("Page 2 Title");
    //        InitializeTreeView();
    //        InitializeContextMenu();
    //        LoadTreeData();
    //    }

    //    private void InitializeTreeView()
    //    {
    //        treeView = new TreeView
    //        {
    //            Dock = DockStyle.Fill
    //        };
    //        treeView.NodeMouseClick += TreeView_NodeMouseClick;
    //        tableLayoutPanel.Controls.Add(treeView, 0, 1);
    //    }

    //    private void InitializeContextMenu()
    //    {
    //        contextMenu = new ContextMenuStrip();
    //        var editMenuItem = new ToolStripMenuItem("编辑", null, EditMenuItem_Click);
    //        contextMenu.Items.Add(editMenuItem);
    //    }

    //    private void LoadTreeData()
    //    {
    //        var treeData = DataStore.Instance.TreeViewData;
    //        if (treeData is Dictionary<string, object> treeDict)
    //        {
    //            var TreeComp = treeDict["SubComp"] as Dictionary<string, object>;
    //            foreach (var key in TreeComp.Keys)
    //            {
    //                var rootNode = new TreeNode(key);
    //                LoadSubComponents(TreeComp[key] as Dictionary<string, object>, rootNode);
    //                treeView.Nodes.Add(rootNode);
    //            }
    //        }
            
    //    }

    //    private void LoadSubComponents(Dictionary<string, object> data, TreeNode parentNode)
    //    {
    //        if (data == null || !data.ContainsKey("SubComp")) return;

    //        var subComponents = data["SubComp"] as Dictionary<string, object>;
    //        foreach (var key in subComponents.Keys)
    //        {
    //            var subNode = new TreeNode(key);
    //            parentNode.Nodes.Add(subNode);
    //            LoadSubComponents(subComponents[key] as Dictionary<string, object>, subNode);
    //        }
    //    }

    //    private void TreeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    //    {
    //        if (e.Button == MouseButtons.Right)
    //        {
    //            // 检查节点是否为第一层节点
    //            if (e.Node.Level > 0)
    //            {
    //                selectedNode = e.Node;
    //                contextMenu.Show(treeView, e.Location);
    //            }
    //        }
    //    }

    //    private void EditMenuItem_Click(object sender, EventArgs e)
    //    {
    //        if (selectedNode != null)
    //        {
    //            var nodeData = GetNodeData(selectedNode);
    //            if (nodeData != null)
    //            {
    //                var detailsForm = new DetailsForm(nodeData, selectedNode.Text, selectedNode.FullPath);
    //                detailsForm.ShowDialog();
    //            }
    //        }
    //    }

    //    private Dictionary<string, object> GetNodeData(TreeNode node)
    //    {
    //        var keys = node.FullPath.Split('\\');
    //        var currentData = DataStore.Instance.GetTreeViewData();

    //        foreach (var key in keys)
    //        {
    //            if (currentData != null)
    //            {
    //                if (currentData.TryGetValue("SubComp", out var SubCurData)){
    //                    if (SubCurData is Dictionary<string, object> subCurDict)
    //                    {
    //                        Logger.Instance.Log($"subCurDict  {subCurDict[key]}");
    //                        currentData = subCurDict[key] as Dictionary<string, object>;
    //                    }
    //                }
    //                else
    //                {

    //                }
    //            }
    //            else
    //            {
    //                return null;
    //            }
    //        }

    //        return currentData;
    //    }

    //    private void NextButton_Click(object sender, EventArgs e)
    //    {
    //        // 保存或其他逻辑
    //        OnNextClicked();
    //    }
    //}

    //public partial class Page3 : PageBase
    //{
    //    private DataGridView dataGridView;
    //    private ContextMenuStrip contextMenu;
    //    private ContextMenuStrip rowContextMenu;
    //    private string ruleText = "规则文本在此显示。";

    //    public Page3() : base()
    //    {
    //        SetTitle("Page 3 Title");
    //        InitializeDataGridView();
    //        InitializeContextMenu();
    //    }

    //    private void InitializeDataGridView()
    //    {
    //        dataGridView = new DataGridView
    //        {
    //            Dock = DockStyle.Fill,
    //            AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,
    //            AllowUserToAddRows = false,
    //            ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize
    //        };

    //        dataGridView.Columns.Add("Parameter", "参数");
    //        var inputTypeColumn = new DataGridViewComboBoxColumn
    //        {
    //            HeaderText = "输入类型",
    //            DataSource = new List<string> { "自由填写", "下拉列表（等差）", "下拉列表（自定义）" }
    //        };
    //        dataGridView.Columns.Add(inputTypeColumn);
    //        dataGridView.Columns.Add("DisplayRule", "显示规则");
    //        dataGridView.Columns.Add("DefaultValue", "默认值");

    //        dataGridView.CellValueChanged += DataGridView_CellValueChanged;
    //        dataGridView.EditingControlShowing += DataGridView_EditingControlShowing;
    //        dataGridView.DataError += DataGridView_DataError;
    //        dataGridView.MouseDown += DataGridView_MouseDown;
    //        tableLayoutPanel.Controls.Add(dataGridView, 0, 1);

    //        // Add rule text label
    //        var ruleLabel = new Label
    //        {
    //            Text = ruleText,
    //            ForeColor = Color.Gray,
    //            Dock = DockStyle.Top
    //        };
    //        tableLayoutPanel.Controls.Add(ruleLabel, 0, 2);
    //    }

    //    private void InitializeContextMenu()
    //    {
    //        contextMenu = new ContextMenuStrip();
    //        var addMenuItem = new ToolStripMenuItem("新增", null, AddMenuItem_Click);
    //        contextMenu.Items.Add(addMenuItem);

    //        rowContextMenu = new ContextMenuStrip();
    //        var addRowMenuItem = new ToolStripMenuItem("新增", null, AddRowMenuItem_Click);
    //        var deleteRowMenuItem = new ToolStripMenuItem("删除", null, DeleteRowMenuItem_Click);
    //        rowContextMenu.Items.AddRange(new ToolStripItem[] { addRowMenuItem, deleteRowMenuItem });
    //    }

    //    private void AddMenuItem_Click(object sender, EventArgs e)
    //    {
    //        dataGridView.Rows.Add();
    //    }

    //    private void AddRowMenuItem_Click(object sender, EventArgs e)
    //    {
    //        if (dataGridView.SelectedCells.Count > 0)
    //        {
    //            int rowIndex = dataGridView.SelectedCells[0].RowIndex;
    //            dataGridView.Rows.Insert(rowIndex + 1);
    //        }
    //    }

    //    private void DeleteRowMenuItem_Click(object sender, EventArgs e)
    //    {
    //        if (dataGridView.SelectedCells.Count > 0)
    //        {
    //            int rowIndex = dataGridView.SelectedCells[0].RowIndex;
    //            int parentRowIndex = (int?)dataGridView.Rows[rowIndex].Tag ?? -1;
    //            if (parentRowIndex == -1)
    //            {
    //                RemoveSubList(dataGridView.Rows[rowIndex]);
    //            }
    //            dataGridView.Rows.RemoveAt(rowIndex);
    //        }
    //    }

    //    private void DataGridView_MouseDown(object sender, MouseEventArgs e)
    //    {
    //        if (e.Button == MouseButtons.Right)
    //        {
    //            var hitTestInfo = dataGridView.HitTest(e.X, e.Y);
    //            if (hitTestInfo.Type == DataGridViewHitTestType.None)
    //            {
    //                contextMenu.Show(dataGridView, e.Location);
    //            }
    //            else if (hitTestInfo.Type == DataGridViewHitTestType.Cell)
    //            {
    //                dataGridView.ClearSelection();
    //                dataGridView.Rows[hitTestInfo.RowIndex].Cells[hitTestInfo.ColumnIndex].Selected = true;
    //                if (dataGridView.Rows[hitTestInfo.RowIndex].Tag == null)
    //                {
    //                    rowContextMenu.Show(dataGridView, e.Location);
    //                }
    //            }
    //        }
    //    }

    //    private void DataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    //    {
    //        if (e.ColumnIndex == 1 && e.RowIndex >= 0 && dataGridView.Rows[e.RowIndex].Tag == null) // 输入类型列
    //        {
    //            var selectedType = dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
    //            HandleInputTypeChange(dataGridView.Rows[e.RowIndex], selectedType);
    //        }
    //    }

    //    private void HandleInputTypeChange(DataGridViewRow row, string selectedType)
    //    {
    //        RemoveSubList(row); // 只清除属于本行的子列表
    //        if (selectedType == "下拉列表（等差）")
    //        {
    //            InsertSubList(row, new string[] { "", "最大值", "最小值", "等差" }, new bool[] { false, true, true, true });
    //        }
    //        else if (selectedType == "下拉列表（自定义）")
    //        {
    //            InsertSubList(row, new string[] { "", "内容列表", "", "" }, new bool[] { false, true, false, false });
    //        }
    //    }

    //    private void DataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    //    {
    //        if (dataGridView.CurrentCell.ColumnIndex == 1 && e.Control is ComboBox comboBox)
    //        {
    //            comboBox.SelectedIndexChanged -= ComboBox_SelectedIndexChanged;
    //            comboBox.SelectedIndexChanged += ComboBox_SelectedIndexChanged;
    //        }
    //        if (e.Control is TextBox textBox)
    //        {
    //            textBox.Enter -= TextBox_Enter;
    //            textBox.Leave -= TextBox_Leave;
    //            textBox.Enter += TextBox_Enter;
    //            textBox.Leave += TextBox_Leave;
    //        }
    //    }

    //    private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
    //    {
    //        if (dataGridView.CurrentCell != null && dataGridView.CurrentCell.ColumnIndex == 1)
    //        {
    //            var comboBox = sender as ComboBox;
    //            if (comboBox?.SelectedItem != null)
    //            {
    //                var selectedType = comboBox.SelectedItem.ToString();
    //                HandleInputTypeChange(dataGridView.Rows[dataGridView.CurrentCell.RowIndex], selectedType);
    //            }
    //        }
    //    }

    //    private void TextBox_Enter(object sender, EventArgs e)
    //    {
    //        if (sender is TextBox textBox && textBox.ForeColor == Color.Gray)
    //        {
    //            textBox.Text = "";
    //            textBox.ForeColor = Color.Black;
    //        }
    //    }

    //    private void TextBox_Leave(object sender, EventArgs e)
    //    {
    //        if (sender is TextBox textBox && string.IsNullOrWhiteSpace(textBox.Text))
    //        {
    //            textBox.Text = textBox.Tag?.ToString() ?? "";
    //            textBox.ForeColor = Color.Gray;
    //        }
    //    }

    //    private void InsertSubList(DataGridViewRow parentRow, string[] headers, bool[] editable)
    //    {
    //        int rowIndex = parentRow.Index + 1;
    //        dataGridView.Rows.Insert(rowIndex);

    //        for (int i = 0; i < headers.Length; i++)
    //        {
    //            if (dataGridView.Columns.Count <= i + 1)
    //            {
    //                dataGridView.Columns.Add($"SubColumn{i + 1}", headers[i]);
    //            }
    //            dataGridView.Rows[rowIndex].Cells[i + 1] = new DataGridViewTextBoxCell(); // 使用 TextBoxCell
    //            dataGridView.Rows[rowIndex].Cells[i + 1].Value = headers[i]; // 设置默认值为 header
    //            dataGridView.Rows[rowIndex].Cells[i + 1].ReadOnly = !editable[i];
    //            dataGridView.Rows[rowIndex].Cells[i + 1].Style.BackColor = editable[i] ? Color.Beige : Color.LightGray;
    //            dataGridView.Rows[rowIndex].Cells[i + 1].Style.ForeColor = Color.Gray;
    //            dataGridView.Rows[rowIndex].Cells[i + 1].Tag = headers[i];
    //        }

    //        dataGridView.Rows[rowIndex].Tag = parentRow.Index; // 使用父行的索引作为标识
    //    }

    //    private void RemoveSubList(DataGridViewRow parentRow)
    //    {
    //        int parentRowIndex = parentRow.Index;
    //        int rowIndex = parentRowIndex + 1;

    //        while (rowIndex < dataGridView.Rows.Count && dataGridView.Rows[rowIndex].Tag != null && (int)dataGridView.Rows[rowIndex].Tag == parentRowIndex)
    //        {
    //            dataGridView.Rows.RemoveAt(rowIndex);
    //        }
    //    }

    //    private void DataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e)
    //    {
    //        MessageBox.Show($"DataGridView 中发生以下异常:\n\n{e.Exception.Message}\n\n要替换此默认对话框，请处理 DataError 事件。");
    //    }

    //    private void NextButton_Click(object sender, EventArgs e)
    //    {
    //        var viewConfig = new Dictionary<string, Dictionary<string, object>>();

    //        for (int i = 0; i < dataGridView.Rows.Count; i++)
    //        {
    //            var row = dataGridView.Rows[i];
    //            if (row.Cells[0].Value != null && !string.IsNullOrEmpty(row.Cells[0].Value.ToString()) && !DataStore.Instance.HeaderMapping.ContainsValue(row.Cells[0].Value.ToString()))
    //            {
    //                var parameterName = row.Cells[0].Value.ToString();
    //                var config = new Dictionary<string, object>
    //                {
    //                    { "输入类型", row.Cells[1].Value },
    //                    { "显示规则", row.Cells[2].Value },
    //                    { "默认值", row.Cells[3].Value }
    //                };

    //                if (row.Cells[1].Value.ToString() == "下拉列表（等差）")
    //                {
    //                    var subConfig = new Dictionary<string, object>
    //                    {
    //                        { "最大值", dataGridView.Rows[i + 1].Cells[1].Value },
    //                        { "最小值", dataGridView.Rows[i + 1].Cells[2].Value },
    //                        { "等差", dataGridView.Rows[i + 1].Cells[3].Value }
    //                    };
    //                    config["列表配置"] = subConfig;
    //                    i += 1; // 跳过子列表行
    //                }
    //                else if (row.Cells[1].Value.ToString() == "下拉列表（自定义）")
    //                {
    //                    var subConfig = new Dictionary<string, object>
    //                    {
    //                        { "内容列表", dataGridView.Rows[i + 1].Cells[1].Value }
    //                    };
    //                    config["列表配置"] = subConfig;
    //                    i += 1; // 跳过子列表行
    //                }
    //                else
    //                {
    //                    config["列表配置"] = new Dictionary<string, object>();
    //                }

    //                viewConfig[parameterName] = config;
    //            }
    //        }

    //        DataStore.Instance.ViewConfig = viewConfig;
    //        OnNextClicked();
    //    }
    //}

    //public partial class Page4 : PageBase
    //{
    //    public Page4() : base()
    //    {
    //        SetTitle("第四页");
    //        InitializeComponent();
    //    }

    //    private void InitializeComponent()
    //    {
    //        // 设置控件的布局
    //        this.Size = new System.Drawing.Size(800, 450);
    //    }
    //}

    //public partial class Page5 : PageBase
    //{
    //    public Page5() : base()
    //    {
    //        SetTitle("第五页");
    //        InitializeComponent();
    //    }

    //    private void InitializeComponent()
    //    {
    //        // 设置控件的布局
    //        this.Size = new System.Drawing.Size(800, 450);
    //    }
    //}

    public class PageBase : UserControl
    {
        protected Label titleLabel;

        protected virtual Button NextPageBtn { get; set; }
        protected virtual Button PrevPageBtn { get; set; }

        public event EventHandler NextClicked;
        public event EventHandler PrevClicked;

        protected virtual void InitializeComponent()
        {

        }
        public virtual void DoShowPage()
        {

        }
        
        public virtual void Cleanup()
        {

        }

        protected void BindButton(Button nextpagebtn, Button prevpagebtn)
        {
            this.NextPageBtn = nextpagebtn;
            this.PrevPageBtn = prevpagebtn;

            nextpagebtn.Click += new EventHandler(this.NextButton_Click);
            prevpagebtn.Click += new EventHandler(this.PrevButton_Click);
        }


        private void NextButton_Click(object sender, EventArgs e)
        {
            OnNextClicked();
        }

        private void PrevButton_Click(object sender, EventArgs e)
        {
            OnPrevClicked();
        }

        protected void OnNextClicked()
        {
            NextClicked?.Invoke(this, EventArgs.Empty);
        }

        protected void OnPrevClicked()
        {
            PrevClicked?.Invoke(this, EventArgs.Empty);
        }

        public void SetButtonVisibility(bool showPrev, bool showNext)
        {
            PrevPageBtn.Visible = showPrev;
            if (!showNext)
            {
                NextPageBtn.Text = "完成";
            }
            else
            {
                NextPageBtn.Text = "下一页";
            }
        }

        public void SetTitle(string title)
        {
            this.titleLabel.Text = title;
        }
    }
}


